/*
 * POI.h
 *
 */

#ifndef POI_H_
#define POI_H_

#include <opencv/cv.h>
#include <opencv/highgui.h>

#include "ObjectType.h"
#include "../Config.h"

/**
 * \class POI
 * @brief
 * @details
 * @date May 25, 2012
 * @author Gennaro Capo
 * @author Mirko Conte
 * @author Vincenzo De Notaris
 * @author Roberto Pacilio
 * @version 1.0
 * @namespace poi
 */
namespace poi {

class POI {

public:

	/**
	 *
	 * @param point
	 * @param distance
	 * @param angle
	 */
	inline POI(cv::Point2i point, ObjectType label, float distance = 0, float angle = -1) {
		this->_point = point;
		this->_distance = distance;
		this->_angle = angle;
		this->_label = label;
	}

	/**
	 *
	 */
	inline ~POI() {
		// Vuoto.
	}

	/**
	 *
	 * @return
	 */
	inline cv::Point2i getPoint() const {
		return _point;
	}

	/**
	 *
	 * @param point
	 */
	inline void setPoint(cv::Point2i point) {
		this->_point = point;
	}

	/**
	 *
	 * @return
	 */
	inline float getDistance() const {
		return _distance;
	}

	/**
	 *
	 * @param distance
	 */
	inline void setDistance(float distance) {
		this->_distance = distance;
	}

	/**
	 *
	 * @return
	 */
	inline float getAngle() const {
		return _angle;
	}

	/**
	 *
	 * @param angle
	 */
	inline void setAngle(float angle) {
		this->_angle = angle;
	}

	/**
	 *
	 * @return
	 */
	inline ObjectType getLabel() const {
		return _label;
	}

private:

	/*
	 * Previene dalla costruzione mediante copia.
	 */
	POI(const POI&);

	/*
	 * Previene l'assegnamento.
	 */
	POI& operator = (const POI&);

	cv::Point2i _point;
	float _distance;
	float _angle;
	ObjectType _label;

};

} /* namespace poi */

#endif /* POI_H_ */
